
//
//  YbManagementData.m
//  OurTourism
//
//  Created by dllo on 15/12/7.
//  Copyright © 2015年 Devil_Coming. All rights reserved.
//

#import "YbManagementData.h"

@implementation YbManagementData
// 关闭数据库
- (void)closeDB
{
    sqlite3_close(dbPoint);
}

+ (YbManagementData *)shareInstance
{
    static YbManagementData *db = nil;
    if (!db) {
        db = [[YbManagementData alloc] init];
    }
    return db;
}


- (void)openDB
{
    // 获取路径
    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
    // 拼接数据库 文件
    NSString *dbPath = [path stringByAppendingPathComponent:@"MagazineDB.db"];
    // 创建数据库
    // 如果不存在  创建数据库 如果存在 使用自己用的数据库(查看dbPoint数据库指针中 是否有地址)
    // 参数1: 数据库存储路径(c\语言字符串) 参数2: 数据库指针
    int result =  sqlite3_open([dbPath UTF8String], &dbPoint);
    NSLog(@"打开结果%d, path 路径%@", result, dbPath);
    
}

// 创建表
- (void)creatTable
{
    // 创建 SQL语句   primary key  主键(表中的识别每条数据的唯一编码)
    NSString *createSQL = @"create table if not exists SMagazineDB (collect text,index_cover text,index_title text,num integer primary key autoincrement)";
    // 执行语句
    // 参数1: 数据库指针 参数2:要执行的SQL语句
    int result = sqlite3_exec(dbPoint, createSQL.UTF8String, NULL, NULL, NULL);
    //3.判断
    [self judgeResult:result type:@"创建表"];
}
// 增加 方法
- (void)insertWithStudent:(YBDestinationModel *)model
{
    //    // 1. SQL语句
    NSString *insertSQL = [NSString stringWithFormat:@"insert into SMagazineDB(collect,index_cover,index_title) values('%@','%@','%@')", model.collect, model.index_cover, model.index_title];
    int result = sqlite3_exec(dbPoint, insertSQL.UTF8String, NULL, NULL, NULL);
    [self judgeResult:result type:@"插入"];
}
// 删除方法

- (void)deleteWithTopic_name:(NSString *)str
{
    // 1. SQL 语句
    //  模糊查询  where name like '%Marr%'    %表示不确定东西
    
    NSString *deleteSQL = [ NSString stringWithFormat:@"delete from SMagazineDB where collect = '%@'", str];
    // 执行
    int result = sqlite3_exec(dbPoint, deleteSQL.UTF8String, NULL, NULL, NULL);
    //判断
    [self judgeResult:result type:@"删除数据"];
}






// 查询
- (NSMutableArray *)selectFromTable
{
    // 查询的操作逻辑
    // 1. 从本地获取所有信息  遍历获得每一条信息
    // 2. 每条信息转化成 model 对象
    // 3. 添加到数组中 返回
    
    // SOL语句
    NSString *selectSQl =@"select *from SMagazineDB";
    //2. 创建数据库替身
    sqlite3_stmt *stmt = nil;
    // 3. 准备SQL 语句
    // 把数据库 对象 SQL语句 数据库替身 关联起来
    int result = sqlite3_prepare_v2(dbPoint, selectSQl.UTF8String, -1, &stmt, nil);
    //4. 创建信息数组(初始化可变数组)
    NSMutableArray *arr = [NSMutableArray array];
    // 5. 判断查询准备
    if (result == SQLITE_OK) {
        NSLog(@"查询准备成功");
        //6.遍历每行信息 (逐行遍历)
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            // 当数据库替身 指向的数据 符合查询条件 逐行获取
            // 逐行获取数据后 逐例获取数据
            // 列数从0 开始
            // 参数1: 替身  参数2: 列数
            const unsigned char *collect = sqlite3_column_text(stmt, 0);
            const unsigned char *index_cover = sqlite3_column_text(stmt, 1);
            const unsigned char *index_title = sqlite3_column_text(stmt, 2);
            YBDestinationModel *temp = [[YBDestinationModel alloc] init];
            temp.collect = [NSString stringWithUTF8String:(const char *)collect];
            temp.index_cover = [NSString stringWithUTF8String:(const char *)index_cover];
            temp.index_title = [NSString stringWithUTF8String:(const char *)index_title];
            // 添加到数组
            [arr addObject:temp];
        }
    }else
    {
        NSLog(@"准备失败, 原因: %d", result);
    }
    //销毁替身
    sqlite3_finalize(stmt);
    return arr;
}



// 判断方法
- (void)judgeResult:(int)r type:(NSString *)type
{
    if (r ==SQLITE_OK) {
        NSLog(@"%@成功" ,type);
    }else{
        NSLog(@"%@失败 ,原因: %d",type ,r);
    }
    
}


@end
